home *** CD-ROM | disk | FTP | other *** search
/ Revolution - Das Atari CD Magazin 1997 / Revolution - Das Atari CD Magazin 1.iso / software / anwendng / utility / cbhd502 / src / c / scsicd.c < prev    next >
C/C++ Source or Header  |  1997-01-21  |  4KB  |  213 lines

  1. /*{{{}}}*/
  2. /*********************************************************************
  3.  *
  4.  * Kommandos zum Zugriff auf CD-ROMs
  5.  *
  6.  * $Source: u:\k\usr\src\scsi\cbhd\rcs\scsicd.c,v $
  7.  *
  8.  * $Revision: 1.4 $
  9.  *
  10.  * $Author: Steffen_Engel $
  11.  *
  12.  * $Date: 1996/02/14 11:29:58 $
  13.  *
  14.  * $State: Exp $
  15.  *
  16.  **********************************************************************
  17.  * History:
  18.  *
  19.  * $Log: scsicd.c,v $
  20.  * Revision 1.4  1996/02/14  11:29:58  Steffen_Engel
  21.  * Diverser Kleinkram
  22.  *
  23.  * Revision 1.3  1995/12/21  01:24:08  S_Engel
  24.  * Kommandostruktur immer lokal für Reentranz
  25.  *
  26.  * Revision 1.2  1995/11/28  19:14:14  S_Engel
  27.  * *** empty log message ***
  28.  *
  29.  * Revision 1.1  1995/11/13  23:45:52  S_Engel
  30.  * Initial revision
  31.  *
  32.  *
  33.  *
  34.  *********************************************************************/
  35.  
  36. #include <import.h>
  37. #include <portab.h>
  38.  
  39. #include <scsidrv/scsiio.h>
  40. #include <scsidrv/scsi.h>
  41.  
  42. #include <export.h>
  43. #include <scsidrv/scsicd.h>
  44.  
  45.  
  46. LONG PauseResume(BOOLEAN Pause)
  47. {{{
  48. tCmd10 Cmd;
  49.  
  50.   SetCmd10(&Cmd, 0x04B, 0, 0);
  51.   if (Pause)
  52.     Cmd.LenLow = 0;
  53.   else
  54.     Cmd.LenLow = 1;
  55.  
  56.   return In(SetCmd((BYTE*)&Cmd, 6, NULL, 0, DefTimeout));
  57. }}}
  58.  
  59.  
  60. LONG PlayAudio(LONG BlockAdr, LONG TransLength)
  61. {{{
  62. tCmd12 Cmd;
  63.   SetCmd12(&Cmd, 0x0A5, BlockAdr, TransLength);
  64.   return In(SetCmd((BYTE *)&Cmd, 6, NULL, 0, DefTimeout));
  65. }}}
  66.  
  67.  
  68. LONG PlayAudioMSF(tMSF Start, tMSF Stop)
  69. {{{
  70. struct
  71. {
  72.   UBYTE Code;
  73.   UBYTE Lun;
  74.   tMSF  Startmsf;
  75.   UBYTE Stopm;
  76.   UBYTE Stops;
  77.   UBYTE Stopf;
  78.   UBYTE Flags;
  79. } Cmd;
  80.  
  81.   Cmd.Code      = 0x47;
  82.   Cmd.Lun       = 0;
  83.   Cmd.Startmsf  = Start;
  84.   Cmd.Stopm     = Stop.s.M;
  85.   Cmd.Stops     = Stop.s.S;
  86.   Cmd.Stopf     = Stop.s.F;
  87.   Cmd.Flags     = 0;
  88.  
  89.   return In(SetCmd((BYTE *)&Cmd, 10, NULL, 0, DefTimeout));
  90. }}}
  91.  
  92.  
  93. LONG PlayAudioTrack(UWORD StartTrack, UWORD StartIndex, UWORD EndTrack, UWORD EndIndex)
  94. {{{
  95.  
  96. struct
  97. {
  98.   BYTE Code;
  99.   BYTE Lun;
  100.   BYTE Res2;
  101.   BYTE Res3;
  102.   BYTE StartTr;
  103.   BYTE StartIn;
  104.   BYTE Res6;
  105.   BYTE StopTr;
  106.   BYTE StopIn;
  107.   BYTE Flags;
  108. }Cmd;
  109.  
  110.   Cmd.Code    = 0x48;
  111.   Cmd.Lun     = 0;
  112.   Cmd.Res2    = 0;
  113.   Cmd.Res3    = 0;
  114.   Cmd.StartTr = StartTrack % 0x100;
  115.   Cmd.StartIn = StartIndex % 0x100;
  116.   Cmd.StopTr  = EndTrack %  0x100;
  117.   Cmd.StopIn  = EndIndex % 0x100;
  118.   Cmd.Res6    = 0;
  119.   Cmd.Flags   = 0;
  120.  
  121.   return In(SetCmd((BYTE *)&Cmd, 10, NULL, 0, DefTimeout));
  122. }}}
  123.  
  124.  
  125. LONG PlayAudioRelative(UWORD StartTrack, ULONG RelAdr, ULONG Len)
  126. {{{
  127. tCmd12 Cmd;
  128.   SetCmd12(&Cmd, 0xA9, RelAdr, Len);
  129.   Cmd.Reserved = StartTrack % 0x100;
  130.   return In(SetCmd((BYTE *)&Cmd, 12, NULL, 0, DefTimeout));
  131. }}}
  132.  
  133.  
  134. LONG ReadHeader(BOOLEAN  MSF, ULONG BlockAdr,
  135.                    BYTE    *Mode, tMSF *AbsoluteAdr)
  136. {{{
  137. LONG    ret;
  138. tMSF    Data[2];
  139. tCmd10 Cmd;
  140.  
  141.   SetCmd10(&Cmd, 0x44, BlockAdr, sizeof(Data));
  142.  
  143.   if (MSF)
  144.   {
  145.     Cmd.Lun = 2;
  146.   }
  147.  
  148.   ret = In(SetCmd((BYTE *)&Cmd, 10, (void *)Data, sizeof(Data), DefTimeout));
  149.  
  150.   *Mode = Data[0].s.Resrvd;
  151.   *AbsoluteAdr = Data[1];
  152.   return ret;
  153. }}}
  154.  
  155.  
  156. LONG ReadSubChannel(BOOLEAN MSF, BOOLEAN SUBQ,
  157.                     UWORD SubFormat, UWORD Track,
  158.                     void *Data, UWORD Len)
  159. {{{
  160. struct{
  161.   BYTE opcode;
  162.   BYTE lun;
  163.   BYTE subq;
  164.   BYTE subform;
  165.   UWORD res;
  166.   BYTE track;
  167.   BYTE lenhigh;
  168.   BYTE lenlow;
  169.   BYTE flag;
  170. }Cmd;
  171.  
  172.   Cmd.opcode = 0x42;
  173.  
  174.   if (MSF)
  175.     Cmd.lun = 2;
  176.   else
  177.     Cmd.lun = 0;
  178.  
  179.   if (SUBQ)
  180.     Cmd.subq = 0x40;
  181.   else
  182.     Cmd.subq = 0;
  183.  
  184.   Cmd.subform = SubFormat;
  185.   Cmd.res = 0;
  186.   Cmd.track = Track;
  187.   Cmd.lenlow = Len % 0x100;
  188.   Cmd.lenhigh = Len % 0x100;
  189.   Cmd.flag = 0;
  190.  
  191.   return In(SetCmd((BYTE *)&Cmd, 10, Data, Len, DefTimeout));
  192. }}}
  193.  
  194.  
  195. LONG ReadTOC(BOOLEAN MSF, UWORD StartTrack,
  196.                   void *Buffer, UWORD Len)
  197. {{{
  198. tCmd10 Cmd;
  199.   SetCmd10(&Cmd, 0x43, 0, Len);
  200.   if (MSF)
  201.   {
  202.     Cmd.Lun |= 2;
  203.   }
  204.  
  205.   Cmd.Reserved = StartTrack;
  206.  
  207.   return In(SetCmd((BYTE *)&Cmd, 10, Buffer, Len, DefTimeout));
  208. }}}
  209.  
  210. BOOLEAN init_scsicd(void)
  211. {{{
  212.   return TRUE;  /* hier gibts nix zu tun */
  213. }}}